package com.demo3_求最长子串.again;

import java.util.ArrayList;

public class Solution {
    public static void main(String[] args) {
        String s="aaaaaa";
        String s1="abcccccccc";
        String s2="abcd";
        System.out.println(new Solution().lengthOfLongestSubstring(s));
        System.out.println(new Solution().lengthOfLongestSubstring(s1));
        System.out.println(new Solution().lengthOfLongestSubstring(s2));
    }
    public static int lengthOfLongestSubstring(String s) {
        if (s==null){
            return 0;
        }
        if (s.length()==0){
            return 0;
        }
        int lastIndex=0;
        int startIndex=0;

        int maxLength=0;
        ArrayList<Character> characterArrayList = new ArrayList<>();
        for (int i = 0; i < s.length(); i++) {
            // 如果包含  或者到达最后
            if (characterArrayList.contains(s.charAt(i))){
                //lastIndex=startIndex;// 记录上一次的坐标
                int len=i-startIndex;// 当前字符串的长度
                maxLength=maxLength==0?len:Math.max(maxLength,len);

                int index = characterArrayList.indexOf(s.charAt(i));  // 在本次集合中重复元素的索引
                startIndex=index+startIndex+1; // 下一次的索引从重复位置的地方记录

                // 删除重复的元素的索引 到这个 起始索引的地方这些元素

                for (int j = 0; j < index+1; j++) {
                    characterArrayList.remove(0);
                }
            }
            // 不管是否包含都把该字符添加进去集合中
            characterArrayList.add(s.charAt(i));
            if (i==s.length()-1){
                int len=i-startIndex+1;
                maxLength= maxLength==0?len:Math.max(maxLength,len);
            }
        }

        return maxLength;
    }
}
